[アップデート] Amazon Personalizeに新たなレシピ「USER_PERSONALIZATION」が追加されました
データアナリティクス事業本部の貞松です。
Amazon Personalizeが立て続けにアップデートおり嬉しい悲鳴をあげております。
今回はAmazon Personalizeで新たに追加されたレシピ(ビルトインのレコメンドアルゴリズム)である「USER_PERSONALIZATION」について解説します。
記事の概要
- Amazon Personalizeの新たなユーザーベースレコメンド用レシピとしてUSER_PERSONALIZATIONが追加された
- USER_PERSONALIZATIONレシピはRNNとバンディットアルゴリズムを効果的に組み合わせることで、より高精度・高効率なレコメンデーションを提供する
- USER_PERSONALIZATIONレシピは、全てのユーザーベースレコメンデーションシナリオ用に最適化されており、通常のレコメンデーションだけでなくコールドアイテムのレコメンド等も考慮されている
- 実際にUSER_PERSONALIZATIONレシピを使用してレコメンデーションを実行したところ、従来のHRNNレシピを使用した場合と比較して精度に関するメトリックは概ね良好だったもののカバレッジの値が劣る結果となった
- インプレッションの利用や新規データを投入したUPDATE学習により、従来のレシピよりも精度、カバレッジ共に上回る結果を期待できる
これまでのユーザーベースレコメンド用レシピ
Amazon Personalizeにはレコメンド作成の為に複数のレシピ(レコメンドモデル用のビルトインアルゴリズム)が用意されています。
アップデート以前は、ユーザーベースレコメンド(対象ユーザーに対してレコメンドアイテムのリストを返す)用のレシピとして以下の3つが用意されていました。
- HRNN
- Hierarchical Recurrent Neural Network(階層的再帰型ニューラルネットワーク)
- User-Item Interactionデータのみを使用する一番シンプルなHRNNレシピ
- ユーザーの行動が時間の経過とともに変化する場合に有効
- HRNN-Metadata
- インタラクション、ユーザー、アイテムのデータセットにあるメタデータから派生した追加の特徴を含むHRNNレシピ
- 少なくとも1つのデータセットのトレーニングデータにメタデータが含まれている必要がある
- 十分なメタデータが使用できる場合、HRNN-MetadataはHRNNよりもパフォーマンスが高くなる
- トレーニング時間が長くなる可能性がある
- HRNN-Coldstart
- まだインタラクションデータの履歴(実績)が存在しないような新しいアイテムの探索も含まれる
- 所謂コールドスタート問題に対応する為のHRNNレシピ
- 新しいアイテムを頻繁にカタログに追加し、それらのアイテムをレコメンデーションに含める必要がある場合に有効
- データセットグループにアイテムデータセットが含まれている必要がある
新たに追加されたUSER_PERSONALIZATION
概要
USER_PERSONALIZATIONレシピは、全てのユーザーベースレコメンデーションシナリオ用に最適化されており、従来のHRNNが3つのレシピに分かれていたのに対して、USER_PERSONALIZATIONは一つのレシピでコールドスタート等の問題に対する考慮を含みます。
この新しいレシピは、RNNとバンディットアルゴリズムを効果的に組み合わせることで、より正確なユーザーモデリング(高い関連性)と効果的な探索を提供します。
詳細は下記のAWS公式ブログを参照してください。
インプレッションデータの利用
インタラクションデータセットにオプションでインプレッションデータを追加できます。インプレッションは、ユーザーが特定のアイテムを操作したときにユーザーに表示されたアイテムのリストです。
インプレッションは、パイプで区切られたアイテムIDの順序付きリストとして表されます。
例えば100|1|2|3|4|5|6|7|8|9
のような形式でデータを保持します。
ユーザーにレコメンデーションされたアイテムとユーザーが操作したアイテムの両方のデータを利用することで、より適切なレコメンドを生成します。
インプレッション情報を入力する為の方法として、2つのモードがあります(上記の例は、明示的なインプレッションに該当します)
- 明示的なインプレッション : 手動で記録してPersonalizeに送信するインプレッション
- 暗黙的なインプレッション : ユーザーがAmazon Personalizeから受け取るレコメンドアイテムのリスト
アイテムメタデータのCREATION_TIMESTAMPを利用
アイテムメタデータのデータセットに対して、オプションでCREATION_TIMESTAMPデータを登録することでアイテムの新しさを判断し、それに応じてレコメンドを調節します。
CREATION_TIMESTAMPを使用しない場合は、インタラクションデータセット内でそのアイテムが出現する最も古いTIMESTAMPをCREATION_TIMESTAMPとして利用します。インタラクションに出現していないアイテムについては、最も新しい最新のアイテムとして扱います。
これにより、コールドアイテムを考慮したり、古いアイテムを除外したレコメンドの作成を行います。
USER_PERSONALIZATIONを使用したレコメンデーションの検証
検証用データ
検証用データとして、上述のAWS公式ブログで使用されているインタラクションデータとアイテムメタデータを使用します。
データの中身は映画のレーティングと各映画のタイトルやジャンルといったメタデータのリストです。
- インタラクションデータ : bandits-demo-interactions.csv
- アイテムメタデータ : bandits-demo-items.csv
データセットのスキーマ定義と実際のデータサンプルは以下の通りです。
↓インタラクションデータのスキーマとデータサンプル
{ "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "ITEM_ID", "type": "string" }, { "name": "EVENT_TYPE", "type": "string" }, { "name": "EVENT_VALUE", "type": ["null","float"] }, { "name": "IMPRESSION", "type": "string" }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0" }
↓アイテムメタデータのスキーマとデータサンプル
{ "type": "record", "name": "Items", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "ITEM_ID", "type": "string" }, { "name": "GENRES", "type": ["null","string"], "categorical": true }, { "name": "TITLE", "type": "string" }, { "name": "CREATION_TIMESTAMP", "type": "long" } ], "version": "1.0" }
検証用データのインポートからUSER_PERSONALIZATIONを使用したソリューションの作成まで
検証用データのインポートからソリューションの作成に関しては、従来の操作とほとんど変わらない為、本記事では割愛します。
変更点として、ソリューション作成時のレシピ選択が変更になり、aws-user-personalizationが追加され、従来のHRNNレシピ3種に対して(legacy)の記載が追加されていることが確認できます。
また、ソリューションバージョン(学習済みモデル)のオフライン評価の為に、同一のデータセットに対して従来のHRNNレシピを使用したソリューションもこの段階で作成しておきます。
作成されたソリューションのオフライン評価
前述で作成したソリューションのソリューションバージョン(学習済みモデル)まで作成が完了したら、オフライン評価の為にUSER_PERSONALIZATIONを使用したソリューションバージョンとHRNNを使用したソリューションバージョンのメトリックを比較します。
↓USER_PERSONALIZATIONを使用したソリューションバージョン
↓HRNNを使用したソリューションバージョン
USER_PERSONALIZATIONの方が、概ねレコメンドの精度に関する指標の値がやや良好な結果となっています。
学習時間とMean reciprocal rank、カバレッジについては従来のHRNNの方が良好な結果となっています。
この結果については、AWS公式のブログにも記載があるように、USER_PERSONALIZATIONが長期的な性能向上の為に短期的なユーザーの関心を犠牲にする可能性がある為と考えられます。また、USER_PERSONALIZATIONのオフライン評価メトリックは、後述のパラメーター(explorationWeight、explorationItemAgeCutoff)のデフォルト値を使用して計算され、それらのパラメータによる影響を受けることにも注意してください。
長期的に見れば、後述のUPDATEトレーニングモードを使用して再学習を繰り返すことによって、従来のレシピと比較して、効率的に精度の高い結果が得られる見込みがあります。
作成したソリューションを使用したキャンペーンの作成
次にUSER_PERSONALIZATIONを使用したソリューションを使ってキャンペーン(リアルタイムレコメンデーションのエンドポイント)を作成します。
USER_PERSONALIZATIONでは、キャンペーン作成時に以下の2つのパラメータを設定することができます。
- explorationWeight : 値が大きいほど、探索の度合いが深くなります。全体的なインパクトの小さい新しいアイテムが推奨される可能性が高くなります。値が0の場合、探索は行われず、結果は関連性に従ってランク付けされます。このパラメーターは[0,1]の範囲で設定でき、デフォルト値は0.3です。
- explorationItemAgeCutoff : トレーニングデータの最新の対話(イベント)タイムスタンプを基準として、過去に遡る最大の日数です。例えば、7に設定した場合、経過時間が7日以上のアイテムはコールドアイテムとは見なされず、これらのアイテムの探索は行われません。ユーザーの興味に関連しており、関連性によって7日以上古いアイテムがレコメンドアイテムとして表示される場合があります。このパラメーターのデフォルト値は30で、0を超える任意の値に設定できます。
まずはデフォルトの値でキャンペーンの作成を実行します。
キャンペーンの作成が完了したら、任意のユーザーのレコメンドアイテムリストを取得してみます。
User IDに1を入力してレコメンド結果を取得します。
次にexplorationWeightを0.5、explorationItemAgeCutoffを10に設定してキャンペーンを作成して、同様にレコメンド結果を取得してみます。
Item IDが1907のアイテムがレコメンドアイテムに出現しています。パラメータ設定により、探索が深くなり、コールドアイテムに対する考慮期間も短くなった為、より新しいアイテムに対するレコメンドがなされています。
UPDATEトレーニングモードによる再学習
再学習は従来通り、ソリューションの画面にあるCreate solution version
をクリックして実行しますが、今回のアップデートにより、USER_PERSONALIZATIONレシピとHRNN-Coldstartレシピを使用したソリューションについてはTraining modeをFULLもしくはUPDATEから選択できるようになりました。
Training modeはソリューションバージョンの作成時に実行するトレーニングの範囲です。
- FULL : トレーニングデータの全体に基づくソリューションバージョンを作成します。
- UPDATE : トレーニングデータについて、変更されたデータのみを処理します。完全に新しいバージョンを作成するのではなく、ソリューションバージョンを段階的に更新する場合に選択します。
まとめ
Amazon Personalizeのアップデートにより新たに追加されたUSER_PERSONALIZATIONレシピについて解説しました。
従来のRNNベースアルゴリズムに対して、バンディットアルゴリズムとのハイブリッドなアルゴリズムを採用することにより単純に性能が向上しているだけでなく、インプレッションやアイテムの鮮度についても考慮することが可能になり、より高度なレコメンデーションが実現できるようになりました。